<?php
/*
 * @Author: an
 * @Date: 2021/12/10
 * @Description: 群组
 */


namespace App\Services\RongCloud;


class GroupService extends BaseService
{
    /**
     * 创建群组
     * @param $userId 要加入群的用户 Id，
     * 最多不超过 1000 个，多个用户传数组 [1,2,3]
     * @param $groupId 群ID
     * @param $groupName 群名称
     * @return bool|mixed|string
     * @author an
     * @time 2021-12-10 17:14
     */
    public function create($userId, $groupId, $groupName)
    {
        $headers = $this->getHeaders();
        $body = http_build_query([
            'groupId' => $groupId,
            'groupName' => $groupName,
        ]);
        if (!is_array($userId)) {
            $body .= '&userId=' . $userId;
        } else {
            $body .= '&' . my_build_query('userId', $userId);
        }
        $url = $this->mainHost . '/group/create.json';
        $data = $this->request($url, $body, $headers);
        return resultRongCloudInfo($data);
    }

    /**
     *
     * @param $userId 操作解散群的用户 Id，可以为任何用户 Id
     * 非群组创建者也可以解散群组。
     * @param $groupId 群组ID
     * @return bool|mixed|string
     * @author an
     * @time 2021-12-10 17:18
     */
    public function dismiss($userId, $groupId)
    {
        $headers = $this->getHeaders();
        $body = http_build_query([
            'userId' => $userId,
            'groupId' => $groupId
        ]);
        $url = $this->mainHost . '/group/dismiss.json';
        $data = $this->request($url, $body, $headers);
        return resultRongCloudInfo($data);
    }

    /**
     * 加群
     * @param $userId 要加入群的用户 Id，
     * 可提交多个，最多不超过 1000 个，多个用户传数组 [1,2,3]
     * @param $groupId 要加入的群 Id。
     * @param $groupName 要加入的群 Id 对应的名称。
     * @return bool|mixed|string
     * @author an
     * @time 2021-12-10 17:44
     */
    public function joinGroup($userId, $groupId, $groupName)
    {
        $headers = $this->getHeaders();
        $body = http_build_query([
            'groupId' => $groupId,
            'groupName' => $groupName,
        ]);
        if (!is_array($userId)) {
            $body .= '&userId=' . $userId;
        } else {
            $body .= '&' . my_build_query('userId', $userId);
        }
        $url = $this->mainHost . '/group/join.json';
        $data = $this->request($url, $body, $headers);
        return resultRongCloudInfo($data);
    }

    /**
     * 退出群组
     * @param $userId 要退出群的用户 Id，可提交多个，最多不超过 1000 个。
     * @param $groupId 要退出的群 Id。
     * @return bool|mixed|string
     * @author an
     * @time 2021-12-10 17:49
     */
    public function quitGroup($userId, $groupId)
    {
        $headers = $this->getHeaders();
        $body = http_build_query([
            'groupId' => $groupId,
        ]);
        if (!is_array($userId)) {
            $body .= '&userId=' . $userId;
        } else {
            $body .= '&' . my_build_query('userId', $userId);
        }
        $url = $this->mainHost . '/group/quit.json';
        $data = $this->request($url, $body, $headers);
        return resultRongCloudInfo($data);
    }

    /**
     * 添加禁言成员
     * @param $userId 用户 Id，每次添加最多不超过 20 个用户。
     * @param $groupId 群组 Id，为空时则设置用户在加入的所有群组中都不能发送消息。
     * @param $minute 禁言时长，以分钟为单位，最大值为 43200 分钟，为 0 表示永久禁言。
     * @return bool|mixed|string
     * @author an
     * @time 2021-12-10 17:58
     */
    public function addGag($userId, $groupId, $minute)
    {
        $headers = $this->getHeaders();
        $body = http_build_query([
            'groupId' => $groupId,
            'minute' => $minute,
        ]);
        if (!is_array($userId)) {
            $body .= '&userId=' . $userId;
        } else {
            if (count($userId) > 20) {
                return ['code' => 400, 'message' => '操作用户一次不能添加超过20个', 'data' => null];
            }
            $body .= '&' . my_build_query('userId', $userId);
        }
        $url = $this->mainHost . '/group/user/gag/add.json';
        $data = $this->request($url, $body, $headers);
        return resultRongCloudInfo($data);
    }

    /**
     * 移除禁言成员
     * @param $userId 用户 Id，每次最多移除 20 个用户。
     * @param $groupId 群组 Id，为空时则移除用户在所有群组中的禁言设置。
     * @return bool|mixed|string
     * @author an
     * @time 2021-12-10 18:00
     */
    public function removeGag($userId, $groupId)
    {
        $headers = $this->getHeaders();
        $body = http_build_query([
            'groupId' => $groupId,
        ]);
        if (!is_array($userId)) {
            $body .= '&userId=' . $userId;
        } else {
            if (count($userId) > 20) {
                return ['code' => 400, 'message' => '操作用户一次不能添加超过20个', 'data' => null];
            }
            $body .= '&' . my_build_query('userId', $userId);
        }
        $url = $this->mainHost . '/group/user/gag/rollback.json';
        $data = $this->request($url, $body, $headers);
        return resultRongCloudInfo($data);
    }


    /**
     * 获取禁言成员
     * @param $groupId 群组 Id，为空时则获取所有群组禁言用户列表。
     * @return users.time 解禁时间。 users.userId 群成员 Id。
     * @author an
     * @time 2021-12-10 18:01
     */
    public function listGag($groupId)
    {
        $headers = $this->getHeaders();
        $body = http_build_query([
            'groupId' => $groupId,
        ]);
        $url = $this->mainHost . '/group/user/gag/list.json';
        $data = $this->request($url, $body, $headers);
        return resultRongCloudInfo($data);
    }
}
